//
// Created by Martin on 2021/10/2.
//

#ifndef DESIGNPATTERN_CPP_FLYWEIGHT_H
#define DESIGNPATTERN_CPP_FLYWEIGHT_H

#include <string>
#include <utility>

/**
 * 描述一个接口, 通过这个接口flyweight可以接受并作用于外部状态
 */
class Flyweight {
public:
    // 要求享元角色必须接受外部状态
    explicit Flyweight(std::string& extrinsic) : extrinsic(extrinsic) { }
    virtual ~Flyweight() = default;
    // 定义业务操作
    virtual void operation(int extrinsic) = 0;
    // 获取、设置内部状态
    std::string getInstrinsic();
    void setInstrinsic(std::string& instrinsic);

protected:
    // 内部状态 -- 本示例中, 并未用到内部状态
    std::string instrinsic;
    // 外部状态
    std::string extrinsic;
};


#endif //DESIGNPATTERN_CPP_FLYWEIGHT_H
